希尔伯特曲线

题目 希尔伯特曲线

image-56e640e7

思路分析

四段代码分别对应4种操作 找规律即可

代码实现

#include <stdio.h>

long long f(int n, int x, int y) {
    if (n == 0) return 1;
    int m = 1 << (n - 1);
    if (x <= m && y <= m) {
        return f(n - 1, y, x);//xy调换 于y=x对称左下角
    }
    if (x > m && y <= m) {
        return 3LL * m * m + f(n - 1, m-y+1 , m * 2 - x + 1); //  剩下右下角 于y=-x对称 m-y+1  m*2-x+1是因为要平移
    }
    if (x <= m && y > m) {
        return 1LL * m * m + f(n - 1, x, y - m);//只移动一个 左上角
    }
    if (x > m && y > m) {
        return 2LL * m * m + f(n - 1, x - m, y - m);//xy同时移动 右上角
    }
}

int main() {
    int n, x, y;
    scanf("%d %d %d", &n, &x, &y);
    printf("%lld", f(n, x, y));

    return 0;
}

同类题型

视频讲解


⬅️ 36进制 🏠 00-冲刺国赛 ➡️ 发现环